<?php

require_once("acciones/ISCmdAccConsOrganizacion.php");
require_once("general/SComando.php");
require_once("daos/impl/SOrganizacionDAO.php");
require_once("tos/SOrganizacionTO.php");
require_once("tos/SOrganizacionAttTO.php");
require_once("tos/SOrganizacionPKTO.php");

class SCmdAccConsOrganizacionImpl extends SComando implements ISCmdAccConsOrganizacion{

	private $organizacionPK = null;
	private $organizacionAtt = null;
	private $organizacionTO = null;
	private $tipoOperacion;
	private $organizaciones = array();

	public function __construct(){
	}


	public function inicializarConsultaPK(SOrganizacionPKTO  $organizacionPK){
		$this->tipoOperacion = ISCmdAccConsOrganizacion::OPER_CONS_ORGANIZACION;
		$this->organizacionPK = $organizacionPK;
	}

	public function inicializarConsultaGenerica(SOrganizacionAttTO  $organizacionAtt){
		$this->tipoOperacion = ISCmdAccConsOrganizacion::OPER_CONS_ORGANIZACIONES;
		$this->organizacionAtt = $organizacionAtt;
	}

	/**
	 * Ejecuta la logica de negocio que implementa el comando y se encarga de comunicarse
	 * con la capa de Datos
	 *
	 */
	public function ejecutar(){

		try {
			$adminPersistencia = SComando::getAdministradorPersistencia();
			$organizacionDAO =  new SOrganizacionDAO();
			$orgs = null;

			switch($this->tipoOperacion) {
				case ISCmdAccConsOrganizacion::OPER_CONS_ORGANIZACION:
					$organizacionDAO->inicializarConsultaOrganizacion($this->organizacionPK);
					$orgs = $adminPersistencia->consultar($organizacionDAO);
					if ($orgs != null && sizeof(usuarios) > 0) {
						$this->organizacionTO = $orgs[0];
					}
					break;

				case ISCmdAccConsOrganizacion::OPER_CONS_ORGANIZACIONES:
					$organizacionDAO->setInfoPaginacion($this->getInfoPaginacion());
					$organizacionDAO->inicializarConsultaOrganizaciones($this->organizacionAtt);
					$orgs = $adminPersistencia->consultar($organizacionDAO);
					$this->setInfoPaginacion($organizacionDAO->getInfoPaginacion());
					$this->organizaciones = $orgs;
					break;
			}

		} catch (Exception $e){
			new Exception("Error al consultar", 101);
		}
	}

	public function getOrganizacion(){
		return $this->organizacionTO;
	}

	public function getOrganizaciones(){
		return $this->organizaciones;
	}

	/**
	 * Valida que los parametros pasados al comando no sean nulos
	 *
	 * @return boolean
	 */
	public function validar(){

		if ($this->tipoOperacion == ISCmdAccConsOrganizacion::OPER_CONS_ORGANIZACION){
			return ($this->organizacionPK != null && $this->organizacionPK->getIdOrganizacion() != null);
		}

		if ($this->tipoOperacion == ISCmdAccConsOrganizacion::OPER_CONS_ORGANIZACIONES){
			return ($this->organizacionAtt != null);
		}
	}
}
?>